﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using MultiGed2;
using MultiGed2.Topologie;

namespace UnitTest1
{
 class UnitTest1
 {
  /*
  static Dictionary<uint, string> priznakyStanice = new Dictionary<uint, string>()
  {
   { Dopravna.Depo, "Depo" },
   { Dopravna.Vnejsi, "Vnejsi" },
   { Dopravna.Pomocna, "Pomocna" }
  };

  static string priznaky2String(uint priznaky, Dictionary<uint, string> tabulka)
  {
   string r = "";
   var nazvy = tabulka.Where(t => (t.Key & priznaky) != 0); //.ToDictionary(t => t.Key, t => t.Value);
   int c = nazvy.Count();
   if (c > 0)
   {
    r = nazvy.ElementAt(0).Value;
    for (int i = 1; i < c; i++)
    {
     r = r + String.Format(", {0}", nazvy.ElementAt(i).Value);
    }
   }
   return r;
  }
  */

  static void printDopravna(Dopravna d)
  {
   List<string> kategorieDopravny = new List<string>();
   Console.WriteLine("{0} {1} {2} ({3})", d.kod, d.zkratka, d.nazev, d.kategorie);
  }

  static void printKoleje(List<TrKolej> koleje)
  {
   foreach(TrKolej tk in koleje)
   {
    Console.WriteLine(tk);
   }
  }

  static void Main(string[] args)
  {
   Oblast test = new Oblast();

   Dopravna dPodolsko = new Dopravna('N', "POD", "Podolsko", KategorieDopravny.Vnejsi),
    dHeimritz = new Dopravna('M', "HEI", "CHZ Heimritz", KategorieDopravny.Vnejsi),
    dKunstat = new Dopravna('G', "KUN", "Kunštát", KategorieDopravny.Zst),
    dVahanec = new Dopravna('H', "VAH", "odb. Vahaneč", KategorieDopravny.Pomocna),
    dRejstejn = new Dopravna('I', "REJ", "Rejštejn", KategorieDopravny.Zst);

   test.dopravny.Add(dPodolsko);
   test.dopravny.Add(dHeimritz);
   test.dopravny.Add(dKunstat);
   test.dopravny.Add(dVahanec);
   test.dopravny.Add(dRejstejn);

   printDopravna(dPodolsko);
   printDopravna(dHeimritz);
   printDopravna(dKunstat);
   printDopravna(dVahanec);
   printDopravna(dRejstejn);

   test.pridatKolej(dKunstat, dHeimritz, SmerJizdy.Sudy, SmerJizdy.Sudy);
   test.pridatKolej(dKunstat, dVahanec, SmerJizdy.Sudy, SmerJizdy.Sudy);
   test.pridatKolej(dVahanec, dRejstejn, SmerJizdy.Sudy, SmerJizdy.Sudy);
   test.pridatKolej(dVahanec, dPodolsko, SmerJizdy.Sudy, SmerJizdy.Sudy);

   /*
   List<TrKolej> lst;

   Console.WriteLine("---");
   lst = Hledani.KolejeZDopravnyVeSmeru(dKunstat, SmerJizdy.Lichy, koleje);
   printKoleje(lst);

   Console.WriteLine("---");
   lst = Hledani.KolejeZDopravnyVeSmeru(dKunstat, SmerJizdy.Sudy, koleje);
   printKoleje(lst);
   */

   List<List<Dopravna>> trasy = Hledani.TrasaZDo(dPodolsko, dRejstejn, test);
   foreach (List<Dopravna> trasa in trasy)
   {
    Console.Write("* ");
    foreach(Dopravna d in trasa)
    {
     Console.Write(String.Format("{0}, ", d));
    }
    Console.WriteLine();
   }

   //List<byte> rychlosti = new List<byte>() {
   // 11, 14, 17, 19, 20, 22, 25, 28,
   // 30, 31, 33, 36, 39, 41, 42, 44 };
   //foreach (byte ms in rychlosti)
   //{
   // Console.WriteLine("{0} : {1}", ms, Utils.ms2kmh(ms));
   //}
  }
 }
}

